//
//  UIColorExtension.swift
//  iOS-Com-Extensions
//
//  Created by yiwanjun on 2020/10/22.
//

import Foundation
import UIKit

public extension UIColor {
    
//    convenience init(hex: String, alpha: CGFloat = 1.0) {
//        var hexColor = String(hex)
//        if hexColor.hasPrefix("#") {
//            let start = hexColor.index(hexColor.startIndex, offsetBy: 1)
//            hexColor = String(hexColor[start...])
//        }
//        
//        let scanner = Scanner(string: hexColor)
//        var hexNumber: UInt64 = 0
//        assert(scanner.scanHexInt64(&hexNumber), "hex format error")
//        
//        if hex.count == 6 {
//            hexNumber += 0xff000000
//        }
//        self.init(aHex: hexNumber)
//    }
    
    /// 通过UInt64创建颜色，例如：0xFFFFFFFF 这是透明度为1的白色
    /// - Parameter aHex: 颜色值的数值
    convenience init(aHex: UInt64) {
        let a = CGFloat((aHex & 0xff000000) >> 24) / 0xff
        let r = CGFloat((aHex & 0x00ff0000) >> 16) / 0xff
        let g = CGFloat((aHex & 0x0000ff00) >> 8) / 0xff
        let b = CGFloat(aHex & 0x000000ff) / 0xff
        self.init(red: r, green: g, blue: b, alpha: a)
    }
    
    /// 通过UInt64创建颜色，有透明度，例如：0xFFFFFFFF 这是透明度为1的白色
    /// - Parameter aHex: 颜色值的数值
    /// - Returns: UIColor
    class func aHex(_ aHex: UInt64) -> UIColor {
        return UIColor.init(aHex: aHex)
    }
    /// 通过UInt64创建颜色，只有RGB，例如：0xFFFFFF 这是透明度为1的白色
    /// - Parameter aHex: 颜色值的数值
    /// - Returns: UIColor
    class func hex(_ hex: UInt64) -> UIColor {
        UIColor.aHex(hex + 0xff000000)
    }
    
    /// 通过RGB创建颜色
    /// - Parameters:
    ///   - r: 红
    ///   - g: 绿
    ///   - b: 蓝
    /// - Returns: UIColor
    class func rgb(_ r: Int, _ g: Int, _ b: Int) -> UIColor {
        self.rgba(r, b, b, 1)
    }
    
    /// 通过RGBA创建颜色
    /// - Parameters:
    ///   - r: 红
    ///   - g: 绿
    ///   - b: 蓝
    ///   - a: 透明度
    /// - Returns: UIColor
    class func rgba(_ r: Int, _ g: Int, _ b: Int, _ a: CGFloat) -> UIColor {
        return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: a)
    }
    /// 通过UInt64创建颜色，有透明度，例如：0xFFFFFFFF 这是透明度为1的白色
    /// - Parameter aHex: 颜色值的数值
    /// - Returns: UIColor
    class func colorWithHex(_ value: UInt64) -> UIColor {
        return UIColor.hex(value)
    }
    
    /// 通过颜色生成图片
    /// - Parameter size: 图片大小
    /// - Returns: 图片
    func toImage(size: CGSize) -> UIImage {
        UIGraphicsBeginImageContext(size)
        let ctx = UIGraphicsGetCurrentContext()
        ctx?.setFillColor(self.cgColor)
        ctx?.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
        let image = UIGraphicsGetImageFromCurrentImageContext()
        return image!
    }
    
    /**
     * UIColor转十六进制字符串
     * Color : UIColor
     * Perfix : 返回十六进制字符串格式(默认#)
     * Return : 十六进制字符串(如果UIColor透明度小于1，返回值含有透明度)
     */
    func hexFromUIColor(perfix: String = "#") -> String {
        var red: CGFloat = 0
        var green: CGFloat = 0
        var blue: CGFloat = 0
        var alpha: CGFloat = 0
        
        let multiplier = CGFloat(255.999)
        
        // 判断当前UIColor是否存在并且映射
        // 如果不存在执行guard里面
        guard self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) else {
            return ""
        }

        if alpha == 1.0 {
            return String(
                format: "%@%02lX%02lX%02lX",
                perfix,
                Int(red * multiplier),
                Int(green * multiplier),
                Int(blue * multiplier)
            )
        } else {
            return String(
                format: "%@%02lX%02lX%02lX%.2f",
                perfix,
                Int(red * multiplier),
                Int(green * multiplier),
                Int(blue * multiplier),
                alpha
                //Int(alpha * multiplier)
            )
        }
    }
}

